/*******************************************************************************
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package com.ufcg.lvc.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.layout.HStack;
import com.ufcg.lvc.client.my.MyColorCanvas;
import com.ufcg.lvc.client.my.MyDragPhoto;
import com.ufcg.lvc.client.my.MyPage;

/**
 * Entry point classes define <code>onModuleLoad()</code>. Tela principal, onde
 * o fotolivro será criado e editado.
 * 
 * @author Larissa Nepomuceno Costa
 * @version 1
 * @since 08/10/2012
 */
public class TelaPrincipal {

	ArrayList<String> fotos = new ArrayList<String>();
	AbsolutePanel panelPrincipal = new AbsolutePanel();
	ArrayList<MyDragPhoto> lista = new ArrayList<MyDragPhoto>();
	ArrayList<ArrayList<String>> diagramacaoPaginasEsquerda = new ArrayList<ArrayList<String>>();
	ArrayList<ArrayList<String>> diagramacaoPaginasDireita = new ArrayList<ArrayList<String>>();
	boolean facebook;
	int pgAtualEsquerda = 0;
	int pgAtualDireita = 0;

	public static GreetingServiceAsync getServico() {
		return GWT.create(GreetingService.class);
	}

	public TelaPrincipal(ArrayList<String> listaNomeFotos,
			ArrayList<String> caminhosCompletos, int largura, int altura, boolean vertical, boolean facebook) {

		for (int i = 0; i < 30; i++) {
			diagramacaoPaginasEsquerda.add(null);
			diagramacaoPaginasDireita.add(null);
		}
		this.facebook = facebook;
		fotos = listaNomeFotos;
		// lerArquivoFotos();

		if (this.facebook == false){
			getServico().gerarThumbnails(caminhosCompletos,
				new AsyncCallback<ArrayList<ArrayList<String>>>() {

					@Override
					public void onSuccess(ArrayList<ArrayList<String>> result) {
					}

					@Override
					public void onFailure(Throwable caught) {
					}
			});
		}
		//		panelPrincipal.setStyleName("body");
	

		RootPanel rootPanel = RootPanel.get("errorLabelContainer");
		rootPanel.setSize("1898", "820");
		rootPanel.setStyleName("h1");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		absolutePanel.setStyleName("BarraTitulo");
		rootPanel.add(absolutePanel, 298, 10);
		absolutePanel.setSize("1295px", "95px");
		final Label errorLabel = new Label();
		errorLabel.setStyleName("fonteTitulo");
		absolutePanel.add(errorLabel, 550, 18);
		errorLabel.setText("Fotolivro");
		
		AbsolutePanel absolutePanel_1 = new AbsolutePanel();
		rootPanel.add(absolutePanel_1, 266, 124);
		absolutePanel_1.setSize("1366px", "723px");

		final MyPage pagina_1 = new MyPage(largura, altura);
		pagina_1.setSize(largura+ "px", altura +"px");
		final MyPage pagina_2 = new MyPage(largura, altura);
		pagina_2.setSize(largura+ "px",  altura +"px");
				
		if (vertical == true) {
			absolutePanel_1.add(pagina_1, 306, 0);
			absolutePanel_1.add(pagina_2, 686, 0);	
		} else {
			absolutePanel_1.add(pagina_1, 35, 39);
			absolutePanel_1.add(pagina_2, 686, 39);
		}
				
		final Label lblEscolhaOlbum = new Label("Página 1");
		lblEscolhaOlbum.setDirectionEstimator(false);
		absolutePanel_1.add(lblEscolhaOlbum, 648, 527);
		lblEscolhaOlbum.setStyleName("h1");

		Button btnSalvar = new Button("Salvar");
		absolutePanel_1 .add(btnSalvar, 1203, 527);
		btnSalvar.setStyleName("gwt-ButtonLetraVerde");
		btnSalvar.setSize("117px", "30px");
		
		TabPanel tabPanel = new TabPanel();
		tabPanel.setVisible(true);
		tabPanel.setAnimationEnabled(true);
		absolutePanel_1.add(tabPanel, 24, 563);
		tabPanel.setSize("1295px", "158px");
		
		AbsolutePanel absolutePanel_fotos = new AbsolutePanel();
		tabPanel.add(absolutePanel_fotos, "Fotos", false);
		absolutePanel_fotos.setSize("1282px", "3cm");
		
		AbsolutePanel absolutePanel_corDeFundo = new AbsolutePanel();
		tabPanel.add(absolutePanel_corDeFundo, "Cor de fundo", false);
		absolutePanel_corDeFundo.setSize("1282px", "3cm");
		
		AbsolutePanel absolutePanel_ilustracoes = new AbsolutePanel();
		tabPanel.add(absolutePanel_ilustracoes, "Ilustra\u00E7\u00F5es", false);
		absolutePanel_ilustracoes.setSize("1282px", "3cm");
		
		HStack hStack_cores = new HStack();
		hStack_cores.setMemberOverlap(-15);
		hStack_cores.setSize("1282px", "113px");
		hStack_cores.setLayoutMargin(15);

		hStack_cores.setCanAcceptDrop(true);
		hStack_cores.setAnimateMembers(true);
		hStack_cores.setOverflow(Overflow.AUTO);
		absolutePanel_corDeFundo.add(hStack_cores, 0, 0);
		

		Image btnPagAnterior = new Image("img/esquerda.png");
		absolutePanel_1.add(btnPagAnterior, 618, 527);
		btnPagAnterior.setSize("20px", "20px");
		
		Image btnProximaPag = new Image("img/direita.png");
		absolutePanel_1.add(btnProximaPag, 728, 527);
		btnProximaPag.setSize("20px", "20px");

		btnProximaPag.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
	
				// Salva a diagramacao da pagina atual
				ArrayList<String> d1 = new ArrayList<String>();
				d1.addAll(pagina_1.getDiagramacao());
				diagramacaoPaginasEsquerda.add(pgAtualEsquerda, d1);
				diagramacaoPaginasEsquerda.remove(pgAtualEsquerda+1);
				
				ArrayList<String> d2 = new ArrayList<String>();
				d2.addAll(pagina_2.getDiagramacao());
				diagramacaoPaginasDireita.add(pgAtualDireita, d2);
				diagramacaoPaginasDireita.remove(pgAtualDireita+1);
				
				
				pgAtualEsquerda++;
				pgAtualDireita++;
				lblEscolhaOlbum.setText("Página "+(pgAtualDireita+1));
												
				
				// Se a proxima pagina da esquerda nao existir --> mostra uma pagina em branco
				if (diagramacaoPaginasEsquerda.get(pgAtualEsquerda)==null) {
					pagina_1.limpar();				
				// Se a proxima pagina da esquerda existir --> coloca as fotos na pagina
				}else {
					pagina_1.atualizarDiagramacao(diagramacaoPaginasEsquerda.get(pgAtualEsquerda));
				}
				
				// Se a proxima pagina da direita nao existir --> mostra uma pagina em branco
				if (diagramacaoPaginasDireita.get(pgAtualDireita)==null) {
					pagina_2.limpar();				
				// Se a proxima pagina da direita existir --> coloca as fotos na pagina
				}else {
					pagina_2.atualizarDiagramacao(diagramacaoPaginasDireita.get(pgAtualDireita));
				}
			}
		});
		
		btnPagAnterior.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				
				// Salva a diagramacao da pagina atual
				ArrayList<String> d1 = new ArrayList<String>();
				d1.addAll(pagina_1.getDiagramacao());
				diagramacaoPaginasEsquerda.add(pgAtualEsquerda, d1);
				diagramacaoPaginasEsquerda.remove(pgAtualEsquerda+1);
				
				ArrayList<String> d2 = new ArrayList<String>();
				d2.addAll(pagina_2.getDiagramacao());
				diagramacaoPaginasDireita.add(pgAtualDireita, d2);
				diagramacaoPaginasDireita.remove(pgAtualDireita+1);
				
				if (pgAtualEsquerda > 0) {
					pgAtualEsquerda--;	
					pgAtualDireita--;
					lblEscolhaOlbum.setText("Página "+(pgAtualDireita+1));
				}
				
				// Se a proxima pagina nao existir --> mostra uma pagina em branco
				if (diagramacaoPaginasEsquerda.get(pgAtualEsquerda)==null) {
					pagina_1.limpar();
				// Se a pagina anterior existir --> coloca as fotos na pagina
				}else {
					pagina_1.atualizarDiagramacao(diagramacaoPaginasEsquerda.get(pgAtualEsquerda));
				}				
				// Se a proxima pagina nao existir --> mostra uma pagina em branco
				if (diagramacaoPaginasDireita.get(pgAtualDireita)==null) {
					pagina_2.limpar();
				// Se a pagina anterior existir --> coloca as fotos na pagina
				}else {
					pagina_2.atualizarDiagramacao(diagramacaoPaginasDireita.get(pgAtualDireita));
				}
			
			}
		});
	
		
		String[] listaCores = {
				// Pastel
				"#FFDAB9", "#EECBAD", "#CDAF95", "#8B7765",
				//Preto
				"#FFFFFF", "#DCDCDC", "#A9A9A9", "#000000",
				// Azul
				"#66FFFF", "#3399FF ", "#0033CC ", "#000066",
				// Rosa
				"#FF99CC", "#FF3399 ", "#FF0066", "#CC0000",
				// Roxo
				"#CC99FF", "#9966FF", "#9933FF", "#6600CC",
				// Verde
				"#CCFF99", "#99FF33", "#009900 ", "#003300",
				// Amarelo
				"#FFFF99", "#FFFF66", "#FFFF00", "#CC9900",
				// Laranja/Vermelho
				"#FF6600", "#FF0000", "#CC0000", "#880000"};
		for (String cor : listaCores) {
			MyColorCanvas c = new MyColorCanvas(cor);
			hStack_cores.addMember(c);
		}

		HStack hStack_fotos = new HStack();
		hStack_fotos.setMemberOverlap(-15);
		hStack_fotos.setSize("1282px", "113px");
		hStack_fotos.setLayoutMargin(5);
		hStack_fotos.setCanDrag(true);
		hStack_fotos.setCanAcceptDrop(true);
		hStack_fotos.setAnimateMembers(true);
		hStack_fotos.setShowDragPlaceHolder(true);
		hStack_fotos.setOverflow(Overflow.AUTO);
		// hStack.setDropLineThickness(4);

		for (String foto : fotos) {
			// foto = C:\Users\lariss~1\workspaceNOV\Foto__\war\Fotos\xhcs40xesv9026aasr9i1.jpg
			lista.add(new MyDragPhoto(foto));
		}
		
		
		for (MyDragPhoto myDragPhoto : lista) {
			hStack_fotos.addMember(myDragPhoto);
		}

		// MyDragPhoto mdf2 = new
		// MyDragPhoto("Fotos/hno6pz92zjj4cx5yvuzb1.jpg");
		// hStack.addMember(mdf2);
		//
		// MyDragPhoto mdf1 = new
		// MyDragPhoto("C:/Users/Larissa/workspace/Teste_/war/Fotos/a873d22hqfq6n1litzqk1.jpg");
		// hStack.addMember(mdf1);

		// scrollPanel.setWidget(hStack);
		absolutePanel_fotos.add(hStack_fotos, 0, 0);
		// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	}

	// public ArrayList<String> lerArquivoFotos() {
	//
	// File file = new
	// File("C:/Users/Larissa/workspace/Teste_/war/fotos/ArquivoFotos.txt");
	// // try {
	// // FileReader reader = new FileReader(file);
	// // BufferedReader input = new BufferedReader(reader);
	// // String linha;
	// // while ((linha = input.readLine()) != null) {
	// // fotos.add(linha.substring(2));
	// // }
	// // input.close();
	// // } catch (IOException ioe) {
	// // System.out.println(ioe);
	// // }
	// try {
	// RandomAccessFile arquivo = new RandomAccessFile(
	// "fotos/ArquivoFotos.txt", "rw");
	// String linha;
	//
	// while ((linha = arquivo.readLine()) != null) {
	// fotos.add(linha.substring(2));
	// }
	//
	// arquivo.close();
	// } catch (FileNotFoundException fnfe) {
	// System.out.println(fnfe.getMessage());
	// } catch (IOException ioe) {
	// System.out.println(ioe.getMessage());
	// }
	//
	// return fotos;
	// }
	//
	public AbsolutePanel getPanel() {
		return panelPrincipal;
	}
}
